////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modmlczv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODMLCZV1_H
#define MODMLCZV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODMLCZV1_NAMESPACE_BEGIN namespace modmlczv1 {
#define MODMLCZV1_NAMESPACE_END }

MODMLCZV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// awbMLCZTriggerCtrlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class awbMLCZTriggerCtrlType
{
    MLCZTriggerCtrlLuxIdx             = 0,
    MLCZTriggerCtrlCCT                = 1,
    MLCZTriggerCtrlValidStatsCntRatio = 2,
    MLCZTriggerCtrlAgwRg              = 3,
    MLCZTriggerCtrlAgwBg              = 4,
    MLCZTriggerCtrlZoneGroup0CntRatio = 5,
    MLCZTriggerCtrlZoneGroup1CntRatio = 6,
    MLCZTriggerCtrlZoneGroup2CntRatio = 7,
    MLCZTriggerCtrlZoneGroup3CntRatio = 8,
    MLCZTriggerCtrlZoneGroup4CntRatio = 9,
    MLCZTriggerCtrlZoneGroup5CntRatio = 10,
    MLCZTriggerCtrlZoneGroup6CntRatio = 11,
    MLCZTriggerCtrlZoneGroup7CntRatio = 12,
    MLCZTriggerCtrlZoneGroup8CntRatio = 13,
    MLCZTriggerCtrlZoneGroup9CntRatio = 14,
    MLCZTriggerCtrlFlashSensitivity   = 15,
    MLCZTriggerCtrlTypeMax            = 16
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// awbMLCZoneConfigType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct awbMLCZoneConfigType
{
    CHAR*                  Description;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// groupID
    ///
    /// Description:   Zone group ID. Each zone group can consist of several zones
    /// Range:         [0,10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  groupID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// zoneType
    ///
    /// Description:   Options of zone Type: Rectangle, Triangle
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbZoneType            zoneType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerLevel
    ///
    /// Description:   Number of triggering dimension
    /// Range:         [1,10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  triggerLevel;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerCtrlType - Array
    /// Length:        3
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbMLCZTriggerCtrlType triggerCtrlType[3];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// awbMLCDetecionZoneType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct awbMLCDetecionZoneType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// zoneConfigData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbMLCZoneConfigType    zoneConfigData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType        triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                  triggerDataCount;
    UINT32                  triggerDataID;
    awbglobalelements::awbTriggerDataZoneType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// awbMLCZoneType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct awbMLCZoneType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// zoneConfigData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbMLCZoneConfigType          zoneConfigData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType              triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                        triggerDataCount;
    UINT32                        triggerDataID;
    awbglobalelements::awbTriggerDataZoneLevel1Type* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixMLCZV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixMLCZV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType            moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;
    awbglobalelements::enableFlagType          enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// detectionZone - Array
    ///
    /// Tuning Level:  often_tune
    /// Description:   define detection zone that will be used for triggering control typ for MLCZ
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                  detectionZoneCount;
    UINT32                  detectionZoneID;
    awbMLCDetecionZoneType* detectionZone;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// MLCZ - Array
    ///
    /// Tuning Level:  often_tune
    /// Description:   MLC zone setting with configurable trigger control type
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                  MLCZCount;
    UINT32                  MLCZID;
    awbMLCZoneType*         MLCZ;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixMLCZV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixMLCZV1TypeClass : public ParameterModule, public chromatixMLCZV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixMLCZV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixMLCZV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixMLCZV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load awbMLCZoneConfigType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadawbMLCZoneConfigType(
        ParameterFileSymbolTableEntry* entry,
        awbMLCZoneConfigType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load awbMLCDetecionZoneType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadawbMLCDetecionZoneType(
        ParameterFileSymbolTableEntry* entry,
        awbMLCDetecionZoneType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load awbMLCZoneType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadawbMLCZoneType(
        ParameterFileSymbolTableEntry* entry,
        awbMLCZoneType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixMLCZV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixMLCZV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixMLCZV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixMLCZV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload awbMLCZoneConfigType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadawbMLCZoneConfigType(
        awbMLCZoneConfigType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload awbMLCDetecionZoneType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadawbMLCDetecionZoneType(
        awbMLCDetecionZoneType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload awbMLCZoneType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadawbMLCZoneType(
        awbMLCZoneType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixMLCZV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixMLCZV1Type(
        chromatixMLCZV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixMLCZV1TypeClass

MODMLCZV1_NAMESPACE_END
#endif // MODMLCZV1_H

